/*
 * Copyright 2007 National Bioinformatics Network
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package dgbgui.gui.event;

import java.awt.event.InputEvent;
import java.util.LinkedHashSet;

import dgbgui.gui.widgets.Widget;
import dgbgui.gui.widgets.visual.IncludeExcludeTermWidget;
import dgbgui.modeldocument.primitives.Concept;
import dgbgui.modeldocument.primitives.Conceptron;
import dgbgui.selection.SelectionManager;
import dgbgui.tools.CreateIncludeTool;
import dgbgui.tools.RemoveIncludeTool;
import dgbgui.tools.Tool;
import edu.umd.cs.piccolo.event.PBasicInputEventHandler;
import edu.umd.cs.piccolo.event.PInputEvent;
import edu.umd.cs.piccolo.event.PInputEventFilter;

public class IncludeExcludeTermEventHandler extends PBasicInputEventHandler implements
        CheckConsumedInputEventHandler {

    public IncludeExcludeTermEventHandler() {
        setEventFilter(new PInputEventFilter(InputEvent.BUTTON1_MASK));
    }
    
    public void mousePressed(PInputEvent event) {
      
        if ( ( SelectionManager.getInstance().getSelection(Conceptron.class).size() == 1) &&
             ( event.getClickCount() == 1 ) ) {

            LinkedHashSet<Class> objectPreference = new LinkedHashSet<Class>();
            objectPreference.add(IncludeExcludeTermWidget.class);
            Widget preferredObj = Widget.findPreferencialObject((event.getCamera().pick(
                    event.getCanvasPosition().getX(),
                    event.getCanvasPosition().getY(),
                    1)).getNodeStackReference(),
                    objectPreference);

            if ( preferredObj != null ) {
                // The cirrent selection must be a concept, otherwise the widget should not exist
                Concept currentConcept = (Concept)SelectionManager.getInstance().getSelection(Conceptron.class).iterator().next();
                assert(currentConcept != null);

                // The include concept is retrieved from the widget and the
                // tool is launched
                Tool tool;
                if ( ((IncludeExcludeTermWidget)preferredObj).isInclude() ) {
                    tool = new CreateIncludeTool(((IncludeExcludeTermWidget)preferredObj).getInclude(),currentConcept);
                } else {
                    tool = new RemoveIncludeTool(((IncludeExcludeTermWidget)preferredObj).getInclude(),currentConcept);
                }
                tool.execute();
                m_processed = true;
                    
            }
        }
    }

    
    public boolean eventProcessed(PInputEvent event, int type) {
        m_processed = false;
        processEvent(event,type);
        return m_processed;
    }
    

    
    boolean m_processed = false;

}
